package com.ruoyi.userr.service.impl;

import java.util.Date;
import java.util.List;

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.stereotype.Service;
import com.ruoyi.userr.mapper.UserUsersMapper;
import com.ruoyi.userr.domain.Users;
import com.ruoyi.userr.service.IUsersService;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/**
 * 用户信息管理Service业务层处理
 * 
 * @author hy
 * @date 2025-08-12
 */
@Service
public class UsersServiceImpl implements IUsersService 
{
    @Resource
    private UserUsersMapper usersMapper;
    @Resource
    private ISysUserService sysUserService;

    /**
     * 查询用户信息管理
     * 
     * @param id 用户信息管理主键
     * @return 用户信息管理
     */
    @Override
    public Users selectUsersById(Integer id)
    {
        return usersMapper.selectUsersById(id);
    }

    /**
     * 查询用户信息管理列表
     * 
     * @param users 用户信息管理
     * @return 用户信息管理
     */
    @Override
    public List<Users> selectUsersList(Users users)
    {
        return usersMapper.selectUsersList(users);
    }

    /**
     * 新增用户信息管理
     * 
     * @param users 用户信息管理
     * @return 结果
     */
    @Override
    @Transactional
    public int insertUsers(Users users)
    {
        SysUser sysUser = new SysUser();
        sysUser.setUserName(users.getPhone()); // 这里必须赋值，不能为 null
        //sysUser.setUserName(sysUser.getUserName());
        // 密码加密（使用若依工具类，与系统登录逻辑一致）
        sysUser.setPassword(SecurityUtils.encryptPassword(users.getPassword()));
        sysUser.setPhonenumber(sysUser.getPhonenumber());
        // 手机号映射（若依表字段为phonenumber）
        sysUser.setPhonenumber(users.getPhone());
        // 昵称映射（取自自定义用户的nickname）
        sysUser.setNickName(users.getNickname());
        // 若依系统用户必填字段（固定值）
        sysUser.setStatus("0"); // 正常状态

        sysUser.setDeptId(1L); // 默认部门ID（确保数据库中存在该部门）
        sysUser.setCreateTime(new Date());


//
//        sysUserService.insertUser(sysUser);
//        sysUserService.registerUser(sysUser);
//        return usersMapper.insertUsers(users);
        // 3. 校验若依系统用户唯一性（避免用户名/手机号重复）
        if (!sysUserService.checkUserNameUnique(sysUser)) {
            throw new ServiceException("手机号已被注册（用户名重复）");
        }
        if (!sysUserService.checkPhoneUnique(sysUser)) {
            throw new ServiceException("手机号已被注册");
        }

        // 4. 调用若依Service注册系统用户
        boolean registerSuccess = sysUserService.registerUser(sysUser);
        if (!registerSuccess) {
            throw new ServiceException("系统用户注册失败");
        }

        // 5. 建立关联：将若依系统用户ID绑定到自定义用户表
        // 若依的registerUser方法会自动回填userId到sysUser对象
        users.setUserId(sysUser.getUserId());

        // 6. 补充自定义用户表的其他字段（可选）
        if (users.getJoinTime() == null) {
            users.setJoinTime(new Date()); // 默认为当前时间
        }
        if (users.getStatus() == null) {
            users.setStatus(0); // 默认正常状态
        }

        // 7. 插入自定义用户表
        int result = usersMapper.insertUsers(users);
        return result;
    }

    /**
     * 修改用户信息管理
     * 
     * @param users 用户信息管理
     * @return 结果
     */

    @Override
    @Transactional
    public int updateUsers(Users users)
    {
        SysUser sysUser = new SysUser();
//        updateUser

        System.out.println(users.getPassword());
        sysUser.setPassword(SecurityUtils.encryptPassword(users.getPassword()));

        System.out.println("============");
        System.out.println(sysUser.getPassword());
        System.out.println("=================");
        Long userId = Long.valueOf(users.getId());
        System.out.println("哈哈哈哈哈哈哈哈哈"+userId);
        usersMapper.updateUsers(users);
        System.out.println(users.getUserId());

        return sysUserService.resetUserPwd(userId, sysUser.getPassword());
    }

    /**
     * 批量删除用户信息管理
     * 
     * @param ids 需要删除的用户信息管理主键
     * @return 结果
     */
    @Override
    public int deleteUsersByIds(Integer[] ids)
    {
        return usersMapper.deleteUsersByIds(ids);
    }

    /**
     * 删除用户信息管理信息
     * 
     * @param id 用户信息管理主键
     * @return 结果
     */
    @Override
    public int deleteUsersById(Integer id)
    {
        return usersMapper.deleteUsersById(id);
    }


    @Override
    public Users getUserWithRecipes(Long id) {
        // 调用Mapper查询用户及关联菜谱
        return usersMapper.selectUserWithRecipes(id);
    }

    @Override
    public Users getUserWithWorks(Long id) {
        return usersMapper.selectUserWithWorks(id);
    }

    @Override
    public int isVip(Long id) {
        return usersMapper.isVip(id);
    }
}
